iT邦幫忙

2024 iThome 鐵人賽

DAY 28
1
AI/ ML & Data

資料科學的小筆記系列 第 27

Day28:使用purrr套件進行functional programming(1)

  • 分享至 

  • xImage
  •  

今天要來紀錄利用purrr套件進行functional programming,
purrr套件中的 map() 函式系列主要用來應用函式於向量或列表(list)的每個元素,代替傳統的 for 迴圈方法

  1. map(): 對列表或向量的每個元素應用一個函式,並回傳一個列表
    語法:
map(.x, .f, ...)
  • .x:列表或向量
  • .f:應用於每個元素的函式

對 l1 中的每個向量進行降序排序:

library(purrr)

l1 <- list(x = c("a", "b"), y = c("c", "d"))
result_map <- map(l1, sort, decreasing = TRUE)

print(result_map)

https://ithelp.ithome.com.tw/upload/images/20240908/20168607AKeBSfUNYn.png

  1. map2(): 將兩個列表或向量的配對元素應用一個函式,並回傳一個列表
    語法:
map2(.x, .y, .f, ...)
  • .x 和 .y:兩個列表或向量
  • .f:應用於每對元素的函式

將 x 和 y 中的對應元素相乘:

x <- list(a = 1:10, b = 11:20, c = 21:30)
y <- list(1, 2, 3)

result_map2 <- map2(x, y, \(x, y) x * y)

print(result_map2)

https://ithelp.ithome.com.tw/upload/images/20240908/201686076I23Lakmi8.png

  1. imap(): 簡化版的 map2(),可使用 .x 的名稱或索引
    語法:
imap(.x, .f, ...)
  • .x:列表或向量
  • .f:應用於每個元素及其名稱或索引的函式

回傳 x 中每個元素及其名稱(取向量的第一個數值)的組合:

result_imap <- imap(x, \(val, name) paste(name, ": ", val[1]))

print(result_imap)

or

result_imap <- imap(x, ~ paste(.y, ": ", .x[1]))

print(result_imap)

https://ithelp.ithome.com.tw/upload/images/20240908/20168607dzx5GoC0vV.png

  • \(args) body 是 R 用來定義匿名函式的語法。相當於 function(args) body。
  • ~ 是 purrr 提供的簡便語法,也可以用來定義匿名函式。
  1. pmap(): 對多個列表中的元素組應用一個函式,並回傳一個列表
    語法:
pmap(.l, .f, ...)
  • .l:含有列表的列表(list of lists)
  • .f:應用於每個元素組的函式

將 x、y 和 z 中的元素組合進行計算:

z <- list(4, 5, 6)

result_pmap <- pmap(list(x, y, z), function(first, second, third) first * (second + third))

print(result_pmap)

https://ithelp.ithome.com.tw/upload/images/20240908/201686079RVFjPnzzS.png

https://ithelp.ithome.com.tw/upload/images/20240908/20168607wAHn4eWoZI.png

今天的小筆記先到這邊~

參考資料:

  1. Apply functions with purrr :: Cheatsheet

上一篇
Day27:使用dplyr的集合運算函數
下一篇
Day29:使用purrr套件進行functional programming(2)
系列文
資料科學的小筆記29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言